package drp.snowbell.entity;

import java.util.Collection;

public interface IEntity extends IPersistent {

	/**
	 * 获取Id
	 * 
	 * @return 实体的Id值
	 */
	String getId();

	/**
	 * 设置Id
	 * 
	 * @param Id
	 *            实体的Id值
	 */
	void setId(String Id);

	/**
	 * 获取名称
	 * 
	 * @return 名称
	 */
	String getName();

	/**
	 * 设置 名称
	 * 
	 * @param name
	 *            实体的名称
	 */
	void setName(String name);

	/**
	 * 获取数据是否已经删除
	 * 
	 * @return 是否删除
	 */
	Boolean getDeleted();

	/**
	 * 设置是否删除
	 * 
	 * @param deleted
	 */
	void setDeleted(Boolean deleted);

	/**
	 * 克隆一个实例,必须深拷贝.
	 * 
	 * @return 实体实例
	 */
	IEntity cloneEntity();

	/**
	 * 获取模块名称
	 */
	String getEntityName();

	/**
	 * 获取数据版本,用于乐观锁
	 */
	Integer getStorageVersion();

	/**
	 * 设置数据版本,用于乐观锁
	 * 
	 * @param vertion
	 */
	void setStorageVersion(Integer nVersion);

	/**
	 * 获取指定名称的部件.
	 * 
	 * @param skillName
	 *            技能名称
	 * @return 部件
	 */
	IPart getPart(String partName);

	/**
	 * 获取所有部件列表.
	 * 
	 * @return 部件列表.
	 */
	Collection<IPart> getPartList();

	/**
	 * 获取基本属性值.也就是属于自己的属性而不是附加的技能的属性.
	 * 
	 * @param property
	 *            模块的属性.
	 * @return 属性的值.
	 */
	Object getBasicValue(Property property);

	/**
	 * 设置基本属性值.也就是属于自己的属性而不是附加的技能的属性.
	 * 
	 * @param property
	 *            模块的属性.
	 * @param value
	 *            要设置的值.
	 */
	void setBasicValue(Property property, Object value);

}
